<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
<script type="text/javascript" src="js/JnPakg.js"></script>
<script type="text/javascript">
(function(){
	dw("09_call于apply的区别.html");
})();

/**
对于apply和call两者在作用上是相同的，但两者在参数上有区别的。
对于第一个参数意义都一样，但对第二个参数：
apply传入的是一个参数数组，也就是将多个参数组合成为一个数组传入，而call则作为call的参数传入（从第二个参数开始）。
如 func.call(func1,var1,var2,var3)对应的apply写法为：func.apply(func1,[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入\
**/

//A.call(thisObj,arg1,agr2...)是利用arg1,arg2...创建一个A实例
//thisObj实例持有a实例.[这个有误实际上用thisObj来代替,A方法体中的this来执行函数]
//并且将A实例的动态公共属性,方法[没有原型公共属性,方法]作为this的动态公共属性和方法
//在08_prototype的继承[5].html中用于实现继承
var A = function(_x,_y){
	dw("A被构造开始 : "+this.constructor);
	var x = _x;
	var y = _y;
	this.getX = function(){return x;}
	this.getY = function(){return y;}
	dw("A被构造结束 : "+this.constructor);
}
A.prototype.z = 3;

var B = function(){
	var x = "XXXXXXX";
	dw("B的构造被调用");
	this.setX = function(o){
		x = o;
	}
	this.getX = function(){
		return x;
	}
}
var b = new B();
A.call(b,5,6);
//A.apply(b,[5,6])
dw(b.getX());
//dw(b.getXb());
dw(b.getY());
dw(b.z);
dw.dl();

b.setX("孔");
dw(b.getX());
//dw(b.getXb());
dw.dl();

/**
A.call = function(){
	alert("再也没有call这个东西了");
}
**/
var C = function(x,y){
	A.call(this,x,y);
}
C.prototype = new A();
var c = new C(7,8);
dw(c.getX());
dw(c.getY());
dw(c.z);

dw.dl();





</script>
</html>